package eventbus

import "sync"

/*
全局事件总线
*/

var (
	// 全局事件总线
	globalEventBus EventBus
	// 创建协程安全
	once sync.Once
)

// 获取全局事件总线
func GlobalEventBus() EventBus {
	once.Do(func() {
		globalEventBus = NewMemoryEventBus()
	})
	return globalEventBus
}

// SetGlobalEventBus 设置全局事件总线
func SetGlobalEventBus(bus EventBus) {
	globalEventBus = bus
}

// Subscribe 全局订阅事件
func Subscribe(eventName string, handler Handler) error {
	return GlobalEventBus().Subscribe(eventName, handler)
}

// Unsubscribe 全局取消订阅
func Unsubscribe(eventName string, handler Handler) error {
	return GlobalEventBus().Unsubscribe(eventName, handler)
}

// Publish 全局发布事件
func Publish(event Event) error {
	return GlobalEventBus().Publish(event)
}

// Close 关闭全局事件总线
func Close() error {
	return GlobalEventBus().Close()
}
